package com.itheima.user.service.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.common.constants.SystemConstants;
import com.itheima.common.exception.LeadNewsException;
import com.itheima.common.util.AppJwtUtil;
import com.itheima.user.dto.LoginDto;
import com.itheima.user.mapper.ApUserMapper;
import com.itheima.user.pojo.ApUser;
import com.itheima.user.service.ApUserService;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * @description <p>APP用户信息 业务实现</p>
 *
 * @version 1.0
 * @package com.itheima.user.service.impl
 */
@Service
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements ApUserService {

    /**
     * app用户登录校验
     *
     * @param dto
     * @return
     */
    @Override
    public Map<String, Object> loginAuth(LoginDto dto) {
        //获取参数
        String phone = dto.getPhone();
        String password = dto.getPassword();
        ApUser apUser = new ApUser();
        apUser.setId(SystemConstants.ANONYMOUS_USER_ID);
        //判断电话号码是否存在，存在就查询，不存在设置id为0
        if (StringUtils.isNotEmpty(phone)){

            apUser = query().eq("phone", phone).one();

            //如果用户不存在，就报错（最好是注册，待优化）
            if (null==apUser){
                throw new LeadNewsException("用户名或密码错误");
            }
            //如果用户存在，则获得盐，把密码进行加密，在和数据库中的密码进行比较
            password +=apUser.getSalt();
            String pwd = DigestUtils.md5DigestAsHex(password.getBytes());

            //密码不正确报错
            if (!apUser.getPassword().equals(pwd)){
                throw new LeadNewsException("用户名或密码错误");
            }

            apUser.setSalt(null);
            apUser.setPassword(null);
        }

        //密码正确，就生成token，组装数据
        String token = AppJwtUtil.createToken(apUser.getId());
        Map<String, Object> resultMap =new HashMap<>();
        resultMap.put("user",apUser);
        resultMap.put("token",token);

        return resultMap;
    }
}
